package NO10_Math;

import java.math.BigInteger;
import java.util.Arrays;

/**
 * 2025-08-15
 * 力扣 - 66. 加一
 * <p>
 * 给定一个表示 大整数 的整数数组 digits，
 * 其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右，从最高位到最低位排列。
 * 这个大整数不包含任何前导 0。
 * 将大整数加 1，并返回结果的数字数组。
 */
public class PlusOneMain {
    public static void main(String[] args) {
        int[] digits = {4, 4, 9};
        System.out.println(Arrays.toString(plusOne(digits)));
    }

//    public static int[] plusOne(int[] digits) {
//        if (digits == null || digits.length == 0){
//            return new int[]{1};
//        }
//
//        for (int i = digits.length - 1; i >= 0; i--) {
//            if (digits[i] < 9) {
//                digits[i]++;
//                return digits; // 无进位时直接返回
//            }
//            digits[i] = 0; // 当前位设为0，进位1
//        }
//
//        // 处理全为9导致数组扩容的情况（如999→1000）
//        int[] newDigits = new int[digits.length + 1];
//        newDigits[0] = 1;
//        return newDigits;
//    }

    // 转成字符串，转成BigInteger，加1，转成字符串，转成int[]
    public static int[] plusOne(int[] digits) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int digit : digits) {
            stringBuilder.append(digit);
        }

        BigInteger bigInteger = new BigInteger(stringBuilder.toString());
        bigInteger = bigInteger.add(BigInteger.ONE);
        String result = bigInteger.toString();
        int[] res = new int[result.length()];
        for (int i = 0; i < result.length(); i++) {
            res[i] = result.charAt(i) - '0';
        }
        return res;
    }
}
